import request from '@/utils/request'

const BASE_URL = '/dk/datasources'

/**
 * 获取数据源列表
 * @param {Object} params - 查询参数
 * @param {number} [params.skip=0] - 跳过记录数
 * @param {number} [params.limit=10] - 返回记录数上限
 * @param {string} [params.search] - 搜索关键词
 * @returns {Promise} - 返回数据源列表
 */
export function getDataSourceList(params) {
  return request({
    url: BASE_URL + '/',
    method: 'get',
    params,
  })
}

/**
 * 创建数据源
 * @param {Object} data - 数据源数据
 * @returns {Promise} - 返回创建结果
 */
export function createDataSource(data) {
  return request({
    url: BASE_URL + '/',
    method: 'post',
    data,
  })
}

/**
 * 获取数据源详情
 * @param {string|number} datasourceId - 数据源ID
 * @returns {Promise} - 返回数据源详情
 */
export function getDataSourceDetail(datasourceId) {
  return request({
    url: `${BASE_URL}/${datasourceId}`,
    method: 'get',
  })
}

/**
 * 更新数据源
 * @param {string|number} datasourceId - 数据源ID
 * @param {Object} data - 更新的数据源数据
 * @returns {Promise} - 返回更新结果
 */
export function updateDataSource(datasourceId, data) {
  return request({
    url: `${BASE_URL}/${datasourceId}`,
    method: 'put',
    data,
  })
}

/**
 * 删除数据源
 * @param {string|number} datasourceId - 数据源ID
 * @returns {Promise} - 返回删除结果
 */
export function deleteDataSource(datasourceId) {
  return request({
    url: `${BASE_URL}/${datasourceId}`,
    method: 'delete',
  })
}

/**
 * 测试数据源连接
 * @param {string|number} datasourceId - 数据源ID
 * @returns {Promise} - 返回连接测试结果
 */
export function testDataSourceConnection(datasourceId) {
  return request({
    url: `${BASE_URL}/${datasourceId}/test`,
    method: 'post',
  })
}

/**
 * 获取数据源对象列表
 * @param {string|number} datasourceId - 数据源ID
 * @param {Object} params - 查询参数
 * @param {string} [params.object_type='table'] - 对象类型(table或view)
 * @returns {Promise} - 返回对象列表
 */
export function getDataSourceObjects(datasourceId, params) {
  return request({
    url: `${BASE_URL}/${datasourceId}/objects`,
    method: 'get',
    params,
  })
}

/**
 * 获取表或视图的列信息
 * @param {string|number} datasourceId - 数据源ID
 * @param {string} tableName - 表名或视图名
 * @returns {Promise} - 返回列信息
 */
export function getTableColumns(datasourceId, tableName) {
  return request({
    url: `${BASE_URL}/${datasourceId}/tables/${tableName}/columns`,
    method: 'get',
  })
}

/**
 * 获取表的样本数据
 * @param {string|number} datasourceId - 数据源ID
 * @param {string} tableName - 表名
 * @param {Object} params - 查询参数
 * @param {number} [params.limit=10] - 返回的记录数上限
 * @returns {Promise} - 返回样本数据
 */
export function getTableSampleData(datasourceId, tableName, params) {
  return request({
    url: `${BASE_URL}/${datasourceId}/tables/${tableName}/sample`,
    method: 'get',
    params,
  })
}

/**
 * 获取表列的统计信息
 * @param {string|number} datasourceId - 数据源ID
 * @param {string} tableName - 表名
 * @param {string} columnName - 列名
 * @returns {Promise} - 返回统计信息
 */
export function getColumnStats(datasourceId, tableName, columnName) {
  return request({
    url: `${BASE_URL}/${datasourceId}/tables/${tableName}/columns/${columnName}/stats`,
    method: 'get',
  })
}
